/**
 * 
 */
package com.nari.baseinfo.dao;

import java.util.List;
import java.util.Map;

import com.nari.baseinfo.model.ICity;
import com.nari.coreframe.dao.hibernate3.IGenericDao;
import com.nari.platform.model.PageCond;
import com.nari.platform.model.ResultWithPageCond;

/**
 * 
 * @author Xiaopeng
 * @date 2013-8-1
 */
public interface ICityDao extends IGenericDao<ICity, String> {
	
	/**
	 * 查询所有一级行政机构
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-2
	 */
	public List<ICity> queryFirstLevelCity() throws Exception;
	
	/**
	 * 根据父机构查询所有子机构列表
	 * @param parentID 父机构(可选)，若不存在，则查询一级行政机构
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-2
	 */
	public List<ICity> queryCityByParentID(String parentID) throws Exception;
	
	/**
	 * 分页查询行政机构列表
	 * @param parentID 父机构(可选)，若不存在，则查询一级行政机构
	 * @param cityName 行政机构名称(可选)
	 * @param pageCond
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-2
	 */
	public ResultWithPageCond<ICity> queryCityPageByParentID(String parentID, String cityName, 
			PageCond pageCond) throws Exception;
	
	/**
	 * 根据父机构唯一标识等信息统计机构个数
	 * @param parentID 父机构唯一标识(可选)，若不存，则统计所有行政机构的个数
	 * @param cityName 机构名称(可选)
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-5
	 */
	public int countCityByParent(String parentID, String cityName) throws Exception;
	
	/**
	 * 通过机构ID列表查询机构信息
	 * @param idList 机构ID列表，若列表为空，则返回空列表
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-6
	 */
	public List<ICity> queryCityByIDList(List<String> idList) throws Exception;
	
	/**
	 * 通过机构ID列表查询机构ID-机构名称映射表
	 * @param idList 机构ID列表，若列表为空，则返回一个空映射表
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-6
	 */
	public Map<String, String> queryIdNameMapByIDList(List<String> idList) throws Exception;
}
